package org.study.tk.boot.mappercustome;

import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * SelectService 接口基类
 *
 * @author Administrator
 */
public interface BaseSelectService<T, PK> {
    /**
     * 根据实体中的属性进行查询，只能有一个返回值，有多个结果是抛出异常，查询条件使用等号
     *
     * @param record
     * @return
     */
    T selectOne(T record);

    /**
     * 根据实体中的属性查询总数，查询条件使用等号
     *
     * @param record
     * @return
     */
    List<T> select(T record);

    /**
     * 查询所有记录
     *
     * @return
     */
    List<T> selectAll();

    /**
     * 根据实体中的属性查询总数，查询条件使用等号
     *
     * @param record
     * @return
     */
    int selectCount(T record);

    /**
     * 根据主键字段进行查询，方法参数必须包含完整的主键属性
     *
     * @param id
     * @return
     */
    T selectByPrimaryKey(PK id);

    /**
     * 根据主键字段查询总数，方法参数必须包含完整的主键属性，查询条件使用等号
     *
     * @param key
     * @return
     */
    boolean existsWithPrimaryKey(PK key);

    /**
     * 根据主键字符串进行查询，类中只有存在一个带有@Id注解的字段
     *
     * @param ids 如 "1,2,3,4"
     * @return
     */
    List<T> selectByIds(String ids);

    /**
     * 根据主键字符串进行查询，类中只有存在一个带有@Id注解的字段
     *
     * @param idList
     * @return
     */
    List<T> selectByIdList(@Param("idList") List<PK> idList);

    /**
     * 根据Condition条件进行查询
     *
     * @param condition
     * @return
     */
    List<T> selectByCondition(Object condition);

    /**
     * 根据Condition条件进行查询总数
     *
     * @param condition
     * @return
     */
    int selectCountByCondition(Object condition);
}
